package _50_rocketmq._producer01;

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * 生产者发送消息步骤
 *      创建一个生产者
 *          使用默认类，创建一个生产者实例
 *          配置必要参数：生产者组，nameserver
 *          调用 start 启动生产者
 *      创建一个消息
 *          使用默认类，创建一个消息实例
 *          配置必要参数：topic, tag, body
 *      发送消息
 *          选择发送消息方式（三种方式）
 *              .sendOneway()   单向发送，没有返回值，不知道是否发送成功
 *              .send()         普通发送，有返回值；可使用 sengCallback 接收回调
 *          发送完关闭生产者，释放资源
 */
public class ProducerSendTest {

    public static void main(String[] args) throws Exception {
        // 使用默认类，创建一个 生产者实例，并配置参数
        DefaultMQProducer producer = new DefaultMQProducer("test_aa_group_name");
        // 可以不指定，则读取环境变量
        producer.setNamesrvAddr("localhost:9876");
        // 启动 生产者 服务
        producer.start();

        // 发送多条消息
        for (int i = 0; i < 5; i++) {
            try {
                // 创建消息，并配置 topic 等参数
                Message message = new Message(
                        "TopicTest",
                        "TagA",
                        "hello mq".getBytes(RemotingHelper.DEFAULT_CHARSET));
                // 生产者 发送消息
                SendResult sendResult = producer.send(message);
                System.out.println("sendResult = " + sendResult);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        // 关闭 生产者 服务
        System.out.println("关闭服务");
        producer.shutdown();
    }

}
